package com.zhentao.service.impl;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhentao.mapper.SysUserMapper;
import com.zhentao.pojo.SysUser;
import com.zhentao.service.SysUserService;
import com.zhentao.util.Result;
import com.zhentao.util.SaltMD5Util;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import static com.zhentao.util.Constant.AccountStatus.ACCOUNT_DISABLE;

/**
* @author 李佳隆
* @description 针对表【sys_user(用户表)】的数据库操作Service实现
* @createDate 2025-08-27 10:14:59
*/
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
    @Override
    public Result login(SysUser user) {
        // 账号
        String name = user.getName();
        // 密码
        String password = user.getPassword();
        // 如果账号或者密码为空,返回错误信息
        if (StringUtils.isEmpty(name) || StringUtils.isEmpty(password)) {
            return Result.ERROR("账号和密码都不能为空！");
        }
        // 根据账号和密码查询对应的用户信息
        SysUser loginUser = this.query()
                .eq("name", name)
                .one();
        if (!StringUtils.isEmpty(loginUser)) {
            // 获取该用户在数据库里面的加密过的密码
            String saltPassword = loginUser.getPassword();
            // 输入的密码和加密后的密码进行比较
            boolean passwordFlag = SaltMD5Util.verifySaltPassword(password, saltPassword);
            // 如果根据账号查询和校验加密密码失败,则返回错误信息
            if (StringUtils.isEmpty(loginUser) || !passwordFlag) {
                return Result.ERROR("登录失败,账号或者密码错误！");
            }
            // 如果账号状态被禁用了
            if (loginUser.getStatus().equals(ACCOUNT_DISABLE.getCode())) {
                return Result.ERROR("登录失败,该账号已被引用,请联系管理员！");
            }
            // 存在的话返回查询到的用户信息
            return Result.OK(loginUser);
        }
        return Result.ERROR("登录失败,账号或者密码错误！");
    }

    @Override
    public Result saveUser(SysUser user) {
        // 密码 进行MD5加盐再入库
        user.setPassword(SaltMD5Util.generateSaltPassword(user.getPassword()));
        if (this.save(user)) {
            return Result.OK(user);
        }
        return Result.ERROR("保存用户信息失败");
    }

}




